Sort a column within Excel

I have a script that creates an Excel file that gives the number of times each object attribute.  In addition, my customer would like to have the list of attributes to be sorted in descending order based on the number of times it's used, but I haven't been able to find anything through Google on how to do this.  I'm sure it's probably a single line of code that, when you have all the data in the file, you can then sort on a specific column in either ascending or descending order.  I just don't know what that function is.  Any help would be appreciated.

 

Chris


Christopher Cote - Wed May 29 14:38:27 EDT 2019

Re: Sort a column within Excel
Mike.Scharnow - Wed May 29 15:45:20 EDT 2019

Hello Chris,

just an idea:

There is a sort perm in DXL, which sorts arrays alphabetically, not numerically. 

void sort(string stringArray[])

To do a numerical sort of an integer, you could pad it with zeroes  (alphabetically sorted, 11 is less than 2, but 00011 is greater than 00002)

 

So, assuming that you have counted the object attribute occurrences in a Skip list with Key=Attribute name, Value=count of occurrences.

Then you could create an array from the skip list of which each entry is of CSV format (values seperated by comma) sort it and print the sorted array

 

Something like this:

/**
 * Created by: MSC
 * Creation date: 29.05.2019
 *
 * DXL Editor is provided by SODIUS (www.sodius.com)
 */
pragma encoding, "UTF-8"


/*!
* \param[in] s String to possibly pad with zeros.
* \return    String padded to length 8 with zeros.
* \brief     Pads "s" with zeros if less than length 8.
*/
string pad8(string s) {
    int len = length s
    if (len == 7) return "0" s
    if (len == 6) return "00" s
    if (len == 5) return "000" s
    if (len == 4) return "0000" s
    if (len == 3) return "00000" s
    if (len == 2) return "000000" s
    if (len == 1) return "0000000" s
    if (len == 0) return "00000000"
    return s
}


// KEY: name of attribute (string) VALUE: number of occurrences (int)
Skip sk = createString()

put (sk, "Attribute A", 9)
put (sk, "Attribute B", 11)
put (sk, "Attribute C", 2)

// calculate the number of entries, create an array of the same size
int iTotals=0
for iCount in (sk) do {iTotals++}
string sSort[iTotals]

// put each entry onto the array
int i = 0
int iCount
for iCount in (sk) do {
    string sAttrName = (string key sk)
    string sEntry = (pad8(iCount"")) "," sAttrName
    sSort[i] = sEntry
    i++
}

sort sSort

Stream stm = write ("C:\\temp\\values.csv")
for (i=0;i<iTotals;i++){
    print sSort[i] "\n"
    stm << sSort[i] "\n"
}
close stm

Result of this script:
 

[progress] Executing /DXL-Library/src/x.dxl
00000002,Attribute C
00000009,Attribute A
00000011,Attribute B
 
[progress] Done.